﻿//****************************************************************************
//
//  File:       RibbonProperties.cs
//
//  Contents:   Properties related to the Windows Ribbon Framework, based on 
//              UIRibbon.idl from windows 7 SDK
//
//****************************************************************************

using System;
using System.Runtime.InteropServices;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;

namespace RibbonLib.Interop
{
    public static class RibbonProperties
    {
        // from MS source
        internal const string UI_PropertyKey = "-7363-696e-8441-798acf5aebb7";

        // Core command properties
        internal static PropertyKey UI_PKEY_Enabled = new PropertyKey(new Guid(Convert.ToString(1, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_BOOL);
        internal static PropertyKey UI_PKEY_LabelDescription = new PropertyKey(new Guid(Convert.ToString(2, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_Keytip = new PropertyKey(new Guid(Convert.ToString(3, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_Label = new PropertyKey(new Guid(Convert.ToString(4, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_TooltipDescription = new PropertyKey(new Guid(Convert.ToString(5, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_TooltipTitle = new PropertyKey(new Guid(Convert.ToString(6, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_LargeImage = new PropertyKey(new Guid(Convert.ToString(7, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UNKNOWN); // IUIImage
        internal static PropertyKey UI_PKEY_LargeHighContrastImage = new PropertyKey(new Guid(Convert.ToString(8, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UNKNOWN); // IUIImage
        internal static PropertyKey UI_PKEY_SmallImage = new PropertyKey(new Guid(Convert.ToString(9, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UNKNOWN); // IUIImage
        internal static PropertyKey UI_PKEY_SmallHighContrastImage = new PropertyKey(new Guid(Convert.ToString(10, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UNKNOWN); // IUIImage

        // Collections properties
        internal static PropertyKey UI_PKEY_CommandId = new PropertyKey(new Guid(Convert.ToString(100, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4);
        internal static PropertyKey UI_PKEY_ItemsSource = new PropertyKey(new Guid(Convert.ToString(101, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UNKNOWN); // IEnumUnknown or IUICollection
        internal static PropertyKey UI_PKEY_Categories = new PropertyKey(new Guid(Convert.ToString(102, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UNKNOWN); // IEnumUnknown or IUICollection
        internal static PropertyKey UI_PKEY_CategoryId = new PropertyKey(new Guid(Convert.ToString(103, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4);
        internal static PropertyKey UI_PKEY_SelectedItem = new PropertyKey(new Guid(Convert.ToString(104, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4);
        internal static PropertyKey UI_PKEY_CommandType = new PropertyKey(new Guid(Convert.ToString(105, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4);
        internal static PropertyKey UI_PKEY_ItemImage = new PropertyKey(new Guid(Convert.ToString(106, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UNKNOWN); // IUIImage

        // Control properties
        internal static PropertyKey UI_PKEY_BooleanValue = new PropertyKey(new Guid(Convert.ToString(200, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_BOOL);
        internal static PropertyKey UI_PKEY_DecimalValue = new PropertyKey(new Guid(Convert.ToString(201, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_DECIMAL);
        internal static PropertyKey UI_PKEY_StringValue = new PropertyKey(new Guid(Convert.ToString(202, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_MaxValue = new PropertyKey(new Guid(Convert.ToString(203, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_DECIMAL);
        internal static PropertyKey UI_PKEY_MinValue = new PropertyKey(new Guid(Convert.ToString(204, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_DECIMAL);
        internal static PropertyKey UI_PKEY_Increment = new PropertyKey(new Guid(Convert.ToString(205, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_DECIMAL);
        internal static PropertyKey UI_PKEY_DecimalPlaces = new PropertyKey(new Guid(Convert.ToString(206, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4);
        internal static PropertyKey UI_PKEY_FormatString = new PropertyKey(new Guid(Convert.ToString(207, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_RepresentativeString = new PropertyKey(new Guid(Convert.ToString(208, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);

        // Font control properties
        internal static PropertyKey UI_PKEY_FontProperties = new PropertyKey(new Guid(Convert.ToString(300, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UNKNOWN); // IPropertyStore
        internal static PropertyKey UI_PKEY_FontProperties_Family = new PropertyKey(new Guid(Convert.ToString(301, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_FontProperties_Size = new PropertyKey(new Guid(Convert.ToString(302, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_DECIMAL);
        internal static PropertyKey UI_PKEY_FontProperties_Bold = new PropertyKey(new Guid(Convert.ToString(303, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_FONTPROPERTIES
        internal static PropertyKey UI_PKEY_FontProperties_Italic = new PropertyKey(new Guid(Convert.ToString(304, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_FONTPROPERTIES
        internal static PropertyKey UI_PKEY_FontProperties_Underline = new PropertyKey(new Guid(Convert.ToString(305, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_FONTPROPERTIES
        internal static PropertyKey UI_PKEY_FontProperties_Strikethrough = new PropertyKey(new Guid(Convert.ToString(306, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_FONTPROPERTIES
        internal static PropertyKey UI_PKEY_FontProperties_VerticalPositioning = new PropertyKey(new Guid(Convert.ToString(307, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_FONTVERTICALPOSITION
        internal static PropertyKey UI_PKEY_FontProperties_ForegroundColor = new PropertyKey(new Guid(Convert.ToString(308, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // COLORREF
        internal static PropertyKey UI_PKEY_FontProperties_BackgroundColor = new PropertyKey(new Guid(Convert.ToString(309, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // COLORREF
        internal static PropertyKey UI_PKEY_FontProperties_ForegroundColorType = new PropertyKey(new Guid(Convert.ToString(310, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_SWATCHCOLORTYPE
        internal static PropertyKey UI_PKEY_FontProperties_BackgroundColorType = new PropertyKey(new Guid(Convert.ToString(311, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_SWATCHCOLORTYPE
        internal static PropertyKey UI_PKEY_FontProperties_ChangedProperties = new PropertyKey(new Guid(Convert.ToString(312, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UNKNOWN); // IPropertyStore
        internal static PropertyKey UI_PKEY_FontProperties_DeltaSize = new PropertyKey(new Guid(Convert.ToString(313, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UINT); // UI_FONTDELTASIZE 

        // Application menu properties
        internal static PropertyKey UI_PKEY_RecentItems = new PropertyKey(new Guid(Convert.ToString(350, 16).PadLeft(8, '0') + UI_PropertyKey), (int)(VarEnum.VT_ARRAY | VarEnum.VT_UNKNOWN));
        internal static PropertyKey UI_PKEY_Pinned = new PropertyKey(new Guid(Convert.ToString(351, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_BOOL);

        // Color picker properties
        internal static PropertyKey UI_PKEY_Color = new PropertyKey(new Guid(Convert.ToString(400, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // COLORREF
        internal static PropertyKey UI_PKEY_ColorType = new PropertyKey(new Guid(Convert.ToString(401, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_SWATCHCOLORTYPE
        internal static PropertyKey UI_PKEY_ColorMode = new PropertyKey(new Guid(Convert.ToString(402, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_SWATCHCOLORMODE
        internal static PropertyKey UI_PKEY_ThemeColorsCategoryLabel = new PropertyKey(new Guid(Convert.ToString(403, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_StandardColorsCategoryLabel = new PropertyKey(new Guid(Convert.ToString(404, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_RecentColorsCategoryLabel = new PropertyKey(new Guid(Convert.ToString(405, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_AutomaticColorLabel = new PropertyKey(new Guid(Convert.ToString(406, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_NoColorLabel = new PropertyKey(new Guid(Convert.ToString(407, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_MoreColorsLabel = new PropertyKey(new Guid(Convert.ToString(408, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_LPWSTR);
        internal static PropertyKey UI_PKEY_ThemeColors = new PropertyKey(new Guid(Convert.ToString(409, 16).PadLeft(8, '0') + UI_PropertyKey), (int)(VarEnum.VT_VECTOR | VarEnum.VT_UI4));
        internal static PropertyKey UI_PKEY_StandardColors = new PropertyKey(new Guid(Convert.ToString(400, 16).PadLeft(8, '0') + UI_PropertyKey), (int)(VarEnum.VT_VECTOR | VarEnum.VT_UI4));
        internal static PropertyKey UI_PKEY_ThemeColorsTooltips = new PropertyKey(new Guid(Convert.ToString(411, 16).PadLeft(8, '0') + UI_PropertyKey), (int)(VarEnum.VT_VECTOR | VarEnum.VT_LPWSTR));
        internal static PropertyKey UI_PKEY_StandardColorsTooltips = new PropertyKey(new Guid(Convert.ToString(412, 16).PadLeft(8, '0') + UI_PropertyKey), (int)(VarEnum.VT_VECTOR | VarEnum.VT_LPWSTR));

        // Ribbon properties
        internal static PropertyKey UI_PKEY_Viewable = new PropertyKey(new Guid(Convert.ToString(1000, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_BOOL);
        internal static PropertyKey UI_PKEY_Minimized = new PropertyKey(new Guid(Convert.ToString(1001, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_BOOL);
        internal static PropertyKey UI_PKEY_QuickAccessToolbarDock = new PropertyKey(new Guid(Convert.ToString(1002, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4);

        // Contextual tabset properties
        internal static PropertyKey UI_PKEY_ContextAvailable = new PropertyKey(new Guid(Convert.ToString(1100, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4);

        // Color properties
        // These are specified using hue, saturation and brightness.  The background, highlight and text colors of all controls
        // will be adjusted to the specified hues and saturations.  The brightness does not represent a component of a specific
        // color, but rather the overall brightness of the controls - 0x00 is darkest, 0xFF is lightest.
        internal static PropertyKey UI_PKEY_GlobalBackgroundColor = new PropertyKey(new Guid(Convert.ToString(2000, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_HSBCOLOR
        internal static PropertyKey UI_PKEY_GlobalHighlightColor = new PropertyKey(new Guid(Convert.ToString(2001, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_HSBCOLOR
        internal static PropertyKey UI_PKEY_GlobalTextColor = new PropertyKey(new Guid(Convert.ToString(2002, 16).PadLeft(8, '0') + UI_PropertyKey), (int)VarEnum.VT_UI4); // UI_HSBCOLOR

    }
}
